home *** CD-ROM | disk | FTP | other *** search
Wrap
var stmList = { gPrefs: Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.stm."), init: function() { this.initDialog(); var e = document.getElementById("filterChilds"); e.addEventListener("DOMAttrModified", this.updateApplyButton, false); e.addEventListener("DOMNodeInserted", this.updateApplyButton, false); e.addEventListener("DOMNodeRemoved", this.updateApplyButton, false); document.addEventListener("keypress", this.onKeyPressed, false); }, initDialog: function() { //filter document.getElementById('filtercbx').checked = this.gPrefs.getBoolPref("pagelock.filter"); var list = this.getPrefFilterList(); var rules = document.getElementById('filterChilds'); while (rules.hasChildNodes()) rules.removeChild(rules.firstChild); for (var i = 0; i < list.length; i++) { if (list[i] != "") { var item = list[i].split("\b"); var rule = item[0]; var enabled = (item.length == 1); this.addFilterRule(rule, enabled); } } //fill urlbox var newurl = window.opener.gBrowser?window.opener.gBrowser.currentURI.spec:""; var u = document.getElementById('urlbox'); u.value = newurl.indexOf("://") < 0 ? "" : newurl; u.select(); //updateStatus this.updateDialogAllStatus(); this.updateApplyButton(false); }, getPrefFilterList: function() { var s = this.gPrefs.getComplexValue("pagelock.filterlist", Components.interfaces.nsISupportsString).data; return (s ? s.split(" ") : ""); }, addFilterRule: function(rule, enabled) { var rules = document.getElementById('filterChilds'); var item = document.createElement('treeitem'); var row = document.createElement('treerow'); var c1 = document.createElement('treecell'); var c2 = document.createElement('treecell'); c1.setAttribute('label', rule); c2.setAttribute('value', enabled); row.appendChild(c1); row.appendChild(c2); item.appendChild(row); rules.appendChild(item); return (rules.childNodes.length-1); }, updateDialogAllStatus: function() { var en = document.getElementById('filtercbx').checked; document.getElementById('filterList').disabled = (!en); document.getElementById('urllabel').disabled = (!en); document.getElementById('urlbox').disabled = (!en); this.updateAddButtonStatus(); this.updateDelButtonStatus(); }, updateAddButtonStatus: function() { var en = document.getElementById('filtercbx').checked; var addbtn = document.getElementById('addbtn'); var urlbox = document.getElementById('urlbox'); addbtn.disabled = (!en) || (stmC.trim(urlbox.value).length < 1); }, updateDelButtonStatus: function() { var en = document.getElementById('filtercbx').checked; var delbtn = document.getElementById('delbtn'); var filter = document.getElementById('filterList'); delbtn.disabled = (!en) || (filter.view.selection.count < 1); }, updateApplyButton: function(e) { document.getElementById("myExtra1").disabled = !e; }, onKeyPressed: function(e) { if (e.keyCode==13 || e.keyCode ==46) { switch(e.keyCode) { case 13: // enter key if (document.activeElement.localName == "input") { e.preventDefault(); e.stopPropagation(); stmList.addNewURL(); } break; case 46: if (document.activeElement.localName == "tree") stmList.delSelected(); break; } } }, addNewURL: function() { var filter = document.getElementById('filterList'); var urlbox = document.getElementById('urlbox'); var rule = stmC.trim(urlbox.value); if (rule != "" && rule != "about:blank") { if (rule.indexOf("://") < 0) { rule = (/^[A-Za-z]:/.test(rule) ? "file:///"+rule.replace(/\\/g,"/") : "http://"+rule+"/"); if (/^file:\/\/.*/.test(rule)) rule = encodeURI(rule); } rule = rule.replace(/\s/g, "%20"); var idx = this.findRule(rule); if (idx == -1) { idx = this.addFilterRule(rule, true); urlbox.value = ""; } filter.view.selection.select(idx); filter.boxObject.ensureRowIsVisible(idx); } this.updateAddButtonStatus(); urlbox.focus(); }, findRule: function(value) { var filter = document.getElementById('filterList'); var count = filter.view.rowCount; for (var i=0; i<count; i++) { var rule = filter.view.getCellText(i, filter.columns['columnRule']); if (rule == value) return i; } return -1; }, delSelected: function() { var filter = document.getElementById('filterList'); var rules = document.getElementById('filterChilds'); var selected, length; if (filter.view.selection.count > 0) { for (var i=rules.childNodes.length-1 ; i>=0 ; i--) { if (filter.view.selection.isSelected(i)) { rules.removeChild(rules.childNodes[i]); selected = i; } } length = rules.childNodes.length; filter.view.selection.select(selected>length-1?length-1:selected); } this.updateDelButtonStatus(); }, destory: function() { var e = document.getElementById("filterChilds"); e.removeEventListener("DOMAttrModified", this.updateApplyButton, false); e.removeEventListener("DOMNodeInserted", this.updateApplyButton, false); e.removeEventListener("DOMNodeRemoved", this.updateApplyButton, false); }, setOptions: function() { //apply the list this.applyListToTabs(this.getPrefFilterList(), this.getFilterListString().split(" ")); //filter var filter = document.getElementById('filtercbx').checked; this.gPrefs.setBoolPref("pagelock.filter", filter); var sString = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); sString.data = this.getFilterListString(); this.gPrefs.setComplexValue("pagelock.filterlist", Components.interfaces.nsISupportsString, sString); //update UI this.updateApplyButton(false); }, getFilterListString: function() { var list = []; var filter = document.getElementById('filterList'); for (var i = 0; i < filter.view.rowCount; i++) { var rule = filter.view.getCellText(i, filter.columns['columnRule']); var enabled = filter.view.getCellValue(i, filter.columns['columnEnabled']); var item = rule + (enabled=="true" ? "" : "\b"); list.push(item); } list.sort(); return list.join(" "); }, applyListToTabs: function(list, newlist) { var mw = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser"); var addedlist = stmC.listAminusB(newlist, list); var deletedlist = stmC.listAminusB(list, newlist); for(var j = 0; j < mw.gBrowser.browsers.length; j++) { for (var i = 0; i < addedlist.length; i++) { var item = addedlist[i].split("\b"); if (item.length == 1) //enabled url if (item[0] == mw.gBrowser.getBrowserAtIndex(j).currentURI.spec) { mw.gBrowser.mTabs[j].setAttribute("isPageLocked", "true"); break; } } for (var i = 0; i < deletedlist.length; i++) { var item = deletedlist[i].split("\b"); if (item.length == 1) //enabled url if (item[0] == mw.gBrowser.getBrowserAtIndex(j).currentURI.spec) { mw.gBrowser.mTabs[j].removeAttribute("isPageLocked"); break; } } } }, onDblClickFilterList: function(e) { var filter = document.getElementById('filterList'); if (!filter.disabled && e.button == 0 && e.detail >= 2) { if (filter.view.selection.count == 1) { var urlbox = document.getElementById('urlbox'); urlbox.value = filter.view.getCellText(filter.currentIndex, filter.columns['columnRule']); urlbox.select(); this.updateAddButtonStatus(); } } }, restoreDefault: function() { var branch = "extensions.stm.pagelock.filterlist"; var aTemp = this.getAllSettings(branch, false); var aDefault = this.getAllSettings(branch, true); this.setAllSettings(branch, aDefault); this.initDialog(); this.setAllSettings(branch, aTemp); this.updateApplyButton(true); }, getAllSettings: function(branch, isDefault) { var prefservice = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var prefs = (isDefault ? prefservice.getDefaultBranch("") : prefservice.getBranch("") ); var preflist = prefs.getChildList(branch, {}); var aList = [branch]; for (var i = 0 ; i < preflist.length ; i++) { try { var value = null; switch (prefs.getPrefType(preflist[i])) { case prefs.PREF_BOOL: value = prefs.getBoolPref(preflist[i]); break; case prefs.PREF_INT: value = prefs.getIntPref(preflist[i]); break; case prefs.PREF_STRING: value = prefs.getComplexValue(preflist[i], Components.interfaces.nsISupportsString).data; break; } aList.push(preflist[i] + "=" + value); } catch (e) {} } return aList; }, setAllSettings: function(branch, aList) { if (!aList || aList.length == 0 || aList[0] != branch) return; var prefservice = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var prefs = prefservice.getBranch(""); var aPrefs = []; for (var i = 1 ; i < aList.length ; i++){ var index = aList[i].indexOf("="); if (index > 0){ var name = aList[i].substring(0, index); var value = aList[i].substring(index+1, aList[i].length); if (stmC.startWith(name, branch)) aPrefs.push([name, value]); } } for (var i = 0 ; i < aPrefs.length ; i++) { try { var name = aPrefs[i][0]; var value = aPrefs[i][1]; switch (prefs.getPrefType(name)) { case prefs.PREF_BOOL: prefs.setBoolPref(name, /true/i.test(value)); break; case prefs.PREF_INT: prefs.setIntPref(name, value); break; case prefs.PREF_STRING: if (value.indexOf('"') == 0) value = value.substring(1, value.length-1); var sString = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); sString.data = value; prefs.setComplexValue(name, Components.interfaces.nsISupportsString, sString); break; } } catch (e) {} } }, exportSettings: function() { var aList = this.getAllSettings("extensions.stm.pagelock.filterlist"); if (aList) this.saveToFile(aList); }, importSettings: function() { var aList = this.loadFromFile(); if (aList) { this.setAllSettings("extensions.stm.pagelock.filterlist", aList); this.initDialog(); } }, saveToFile: function(aList) { var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker); var stream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].createInstance(Components.interfaces.nsIConverterOutputStream); fp.init(window, null, fp.modeSave); fp.defaultExtension = "txt"; fp.defaultString = "Auto-Pagelock-URLs"; fp.appendFilters(fp.filterText); if (fp.show() != fp.returnCancel) { try { if (fp.file.exists()) fp.file.remove(true); fp.file.create(fp.file.NORMAL_FILE_TYPE, 0666); stream.init(fp.file, 0x02, 0x200, null); converter.init(stream, "UTF-8", 0, 0x0000); for (var i = 0; i < aList.length ; i++) { converter.writeString(aList[i] + "\n"); } } finally { converter.close(); stream.close(); } } }, loadFromFile: function() { var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker); var stream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); var converter = Components.classes["@mozilla.org/intl/converter-input-stream;1"].createInstance(Components.interfaces.nsIConverterInputStream); fp.init(window, null, fp.modeOpen); fp.defaultExtension = "txt"; fp.appendFilters(fp.filterText); if (fp.show() != fp.returnCancel) { try { var input = {}; stream.init(fp.file, 0x01, 0444, null); converter.init(stream, "UTF-8", 0, 0x0000); converter.readString(stream.available(), input); var linebreak = input.value.match(/(((\n+)|(\r+))+)/m)[1]; return input.value.split(linebreak); } finally { converter.close(); stream.close(); } } return null; }, };//var end